package net.bolue.sysmng.util;

import java.util.Stack;

/**
 * 使用栈实现字符串的括号匹配检查。
 * @author Administrator
 *
 */
public class BracketMatch {

	/**
	 * 要匹配的左括号
	 */
	public static char[] leftBracket = {'(','[','{'};
	
	/**
	 * 要匹配的右括号,与左括号对应
	 */
	public static char[] rightBracket = {')',']','}'};
	
	/**
	 * 字符串括号匹配
	 * @param str
	 * @return
	 */
	public static boolean match(String str) {
		Stack<Character> stack = new Stack<Character>();	//定义一个存放括号的栈。
		char[] ca = str.toCharArray();	//将字符串转为字符数组以便对其遍历。
		
		for (int index = 0; index < ca.length; ++index) {
			Character c2 = ca[index];
			for(int i = 0;i<leftBracket.length;i++){
				char lb = leftBracket[i];
				if(c2==lb){	//是需要匹配的左括号
					stack.push(c2);
					break;
				}
			}
			
			for(int i = 0;i<rightBracket.length;i++){
				char rb = rightBracket[i];
				if(c2==rb){ //是需要匹配的又括号
					if(stack.isEmpty()){
						return false;
					}
					char lb = leftBracket[i];//与右括号对应的左括号
					Character c1 = (Character) stack.peek();
					if(c1==lb){
						stack.pop();
					}else{	//没有找到与右括号对应的左括号
						return false;
					}
					
				}
			}
		}
		return stack.isEmpty();
	}
}
